﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using TISModel;
using BTO;

namespace DAL
{
    public class DALTransporte
    {
        public List<BTO.Transporte> list()
        {
            //Pesquisa dados
            var transportesEntities = new TISModel.TISEntities();

            //cria modelos e add na lista para retornar
            var transportes = (from c in transportesEntities.Transporte
                            select new BTO.Transporte
                            {
                                IDTransporte = c.IDTransporte,
                                IDTipoTransporte = c.IDTipoTransporte,
                                IDPartida = c.IDPartida,
                                IDChegada = c.IDChegada,
                                lotacao = c.lotacao
                                
                            }).ToList();

            return transportes;
        }

        public BTO.Transporte getByID(int? id)
        {
            //Pesquisa dados e cria modelo para retornar
            var transportesEntities = new TISModel.TISEntities();
            var transporte = (from c in transportesEntities.Transporte
                           where c.IDTransporte == id
                           select new BTO.Transporte
                           {
                               IDTransporte = c.IDTransporte,
                               IDTipoTransporte = c.IDTipoTransporte,
                               IDPartida = c.IDPartida,
                               IDChegada = c.IDChegada,
                               lotacao = c.lotacao

                           }).FirstOrDefault();

            return transporte;

        }
        
        public List<BTO.Transporte> getByTipoTransporte(int idTipoTransporte)
        {
            //Pesquisa dados e cria modelo para retornar
            var transportesEntities = new TISModel.TISEntities();
            var transportes = (from c in transportesEntities.Transporte
                              where c.IDTipoTransporte == idTipoTransporte
                              select new BTO.Transporte
                              {
                                  IDTransporte = c.IDTransporte,
                                  IDTipoTransporte = c.IDTipoTransporte,
                                  IDPartida = c.IDPartida,
                                  IDChegada = c.IDChegada,
                                  lotacao = c.lotacao

                              }).ToList();

            return transportes;
        }

        public List<BTO.Transporte> getByIDPartida(int idPartida)
        {
            //Pesquisa dados e cria modelo para retornar
            var transportesEntities = new TISModel.TISEntities();
            var transportes = (from c in transportesEntities.Transporte
                               where c.IDPartida == idPartida
                               select new BTO.Transporte
                               {
                                   IDTransporte = c.IDTransporte,
                                   IDTipoTransporte = c.IDTipoTransporte,
                                   IDPartida = c.IDPartida,
                                   IDChegada = c.IDChegada,
                                   lotacao = c.lotacao

                               }).ToList();

            return transportes;
        }

        public List<BTO.Transporte> getByIDChegada(int idChegada)
        {
            //Pesquisa dados e cria modelo para retornar
            var transportesEntities = new TISModel.TISEntities();
            var transportes = (from c in transportesEntities.Transporte
                               where c.IDChegada == idChegada
                               select new BTO.Transporte
                               {
                                   IDTransporte = c.IDTransporte,
                                   IDTipoTransporte = c.IDTipoTransporte,
                                   IDPartida = c.IDPartida,
                                   IDChegada = c.IDChegada,
                                   lotacao = c.lotacao

                               }).ToList();

            return transportes;
        }
       
        public void insert(BTO.Transporte toInsert)
        {
            try
            {
                //cria um entity model e guarda
                var transporteEntities = new TISModel.TISEntities();

                TISModel.Transporte transporte = new TISModel.Transporte();
                transporte.IDTipoTransporte = toInsert.IDTipoTransporte;
                transporte.IDPartida = toInsert.IDPartida;
                transporte.IDChegada = toInsert.IDChegada;
                transporte.lotacao = toInsert.lotacao;

                transporteEntities.AddToTransporte(transporte);
                transporteEntities.SaveChanges();

            }
            catch (Exception)
            {
                throw new System.Exception("Não foi Possível inserir o transporte!");
            }
        }

        public void update(BTO.Transporte toUpdate)
        {
            var transporteEntities = new TISModel.TISEntities();
            var transporte = (from c in transporteEntities.Transporte where c.IDTransporte == toUpdate.IDTransporte select c).FirstOrDefault();


            if (transporte != null)
            {
                try
                {
                    transporte.IDTransporte = toUpdate.IDTransporte;
                    transporte.IDTipoTransporte = toUpdate.IDTipoTransporte;
                    transporte.IDPartida = toUpdate.IDPartida;
                    transporte.IDChegada = toUpdate.IDChegada;
                    transporte.lotacao = toUpdate.lotacao;

                    transporteEntities.SaveChanges();
                }
                catch (Exception)
                {
                    throw new System.Exception("Não foi possível actualizar o transporte!");
                }

            }
            else
            {
                throw new System.Exception("Transporte não encontrada!");
            }
            
        }

        public void delete(int id)
        {
            var transporteEntities = new TISModel.TISEntities();
            var transporte = (from c in transporteEntities.Transporte where c.IDTransporte == id select c).FirstOrDefault();

            if (transporte != null)
            {
                transporteEntities.DeleteObject(transporte);
                transporteEntities.SaveChanges();
            }
            else
            {
                throw new System.Exception("Transporte não encontrado!");
            }

        }
    }
}
